Ad Widget

Collapse

MSSQL: SQL query returned empty result. 

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Evgene-mmk
    Member
    • Nov 2020
    • 44

    #1

    MSSQL: SQL query returned empty result. 

    С MSSQL собираем через "Монитор баз данных" такие данные "SELECT TOP 1 creation_time FROM sys.dm_server_memory_dumps order by creation_time desc"
    возвращается строка типа "2019-04-06 13:21:26.6222115 +05:00" (дата создания дампа памяти при ошибке)

    в предобработке стоит "отбрасывать не изменившееся"

    Задача сделать триггер на появление ошибки.
    Но есть несколько проблем: если нет ни одной записи то возвращается SQL query returned empty result. и Item становиться в состояние не поддерживается
    может вернуть старую запись например за 2019 год на которую уже не надо реагировать.
    Триггер "{[MSSQL.SqlDumpExceptionHandler,{$MSSQL.DSN}].strlen()}>0" сработает в первый раз после создания итема (можно потерпеть) и при каждом перезапуске zabbix (что напрягает так как серверов >50 шт).
    Сделать триггер на diff() ?? Но как отреагирует diff() в триггере если состояние итема не поддерживается (нет дампа) и вдруг он появился то есть select вернул какое-то значение.

    Может знающие люди направят в нужное русло ? как правильно сделать ??
    Может быть как-то вытащить дату и сравнивать ее с текущей ?
    Или каким-то волшебным образом заставить заббикс писать в базу пустую строку при получении SQL query returned empty result ?


  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Если у вас 5.2 версия то можно использовать припроцессинг “Check for not supported value” и проигнорировать ошибку или подставить свое значение.
    ну и конечно можно преобразовать полученную датувремя например в unixtime и нормально работать с этим значением в JS

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Originally posted by Evgene-mmk
      Триггер "{[MSSQL.SqlDumpExceptionHandler,{$MSSQL.DSN}].strlen()}>0" сработает в первый раз после создания итема (можно потерпеть) и при каждом перезапуске zabbix (что напрягает так как серверов >50 шт).
      Триггер
      Code:
      {[MSSQL.SqlDumpExceptionHandler,{$MSSQL.DSN}].strlen()}>0
      and
      {[MSSQL.SqlDumpExceptionHandler,{$MSSQL.DSN}].count(10m)}>0
      будет реагировать только на ошибки, полученные за последние 10 минут. Т.е. только на относительно свежие, а не за 2019 год.

      Ещё можно переформулировать SELECT таким образом, чтобы возвращался не таймстэмп, а количество записей в таблице за, скажем, последний час. Тогда приходить будет всегда число, которое в триггере можно сравнивать с нулём, а элемент данных не будет переходить в неподдерживаемое состояние.

      Comment

      • Evgene-mmk
        Member
        • Nov 2020
        • 44

        #4
        попробовал так SELECT ISNULL((SELECT top 1 creation_time FROM sys.dm_server_memory_dumps order by creation_time desc), '') вернет 1900-01-01 00:00:00.0000000 +00:00 если ничего нет, но при перезапуске zbx одинаковые записи все равно попадают в базу не смотря на то что стоит "отбрасывать не изменившееся"

        Comment

        Working...